package models;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Usuario {
	
	private static Connection conexao;
	private static Statement comando;
	
	
	
	/***********************************************************************************/
	
	protected static void conectar() throws SQLException {  
		try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
		}

			conexao = DriverManager.getConnection(  
			        "jdbc:postgresql://localhost:5432/SGRv2",  
			        "postgres",  
			        "senha");
		
			comando =  conexao.createStatement();
	}

	/***********************************************************************************/
	
	  int id;
      String nome;
      String datanascimento;
      String fone;
      String celular;
      String email;
      String rua;
      String bairro;
      int numeroendereco;
      String cpf;
      String cep;
      int idhabilitacao;
      String nomehabilitacao;
      int idtipo;
      String nometipo;
      int idmonitor;
      String nomemonitor;
      int idadministrador;
      String nomeadministrador;
      String login;
      String senha;
      
      	public int getid() {
			return id;
		}
		public void setid(int id) {
			this.id = id;
		}
		
		
		public String getnome() {
			return nome;
		}
		public void setnome(String nome ) {
			this.nome = nome ;
		}
      
		
		public String getdatanascimento() {
			return datanascimento;
		}
		public void setdatanascimento(String datanascimento) {
			this.datanascimento = datanascimento;
		}
      
		
		public String getfone() {
			return fone;
		}
		public void setfone(String fone) {
			this.fone = fone;
		}
      

		public String getcelular() {
			return celular;
		}
		public void setcelular(String celular) {
			this.celular = celular;
		}
      
		
		public String getemail() {
			return email;
		}
		public void setemail(String email) {
			this.email = email;
		}
      
		
		public String getrua() {
			return rua;
		}
		public void setrua(String rua) {
			this.rua = rua;
		}
      
		
		public String getbairro() {
			return bairro;
		}
		public void setbairro(String bairro) {
			this.bairro = bairro;
		}
      
		
		public int getnumeroendereco() {
			return numeroendereco;
		}
		public void setnumeroendereco(int numeroendereco) {
			this.numeroendereco = numeroendereco;
		}
      
		public String getcpf() {
			return cpf;
		}
		public void setcpf(String cpf) {
			this.cpf = cpf;
		}
      
		
		public String getcep() {
			return cep;
		}
		public void setcep(String cep) {
			this.cep = cep;
		}
      
		public int getidtipo() {
			return idtipo;
		}
		public void setidtipo(int idtipo) {
			this.idtipo = idtipo;
		}
      
		public String getnometipo() {
			return nometipo;
		}
		public void setnometipo(String nometipo) {
			this.nometipo = nometipo;
		}
      
		
		
		
		
		
		
		
		public int getidhabilitacao() {
			return idhabilitacao;
		}
		public void setidhabilitacao(int idhabilitacao) {
			this.idhabilitacao = idhabilitacao;
		}
		
		
		
		
		
		public String getnomehabilitacao() {
			return nomehabilitacao;
		}
		public void setnomehabilitacao(String nomehabilitacao) {
			this.nomehabilitacao = nomehabilitacao;
		}
		
		
		
		
		
      
		
		public int getidmonitor() {
			return idmonitor;
		}
		public void setidmonitor(int idmonitor) {
			this.idmonitor = idmonitor;
		}
      

		public String getnomemonitor() {
			return nomemonitor;
		}
		public void setnomemonitor(String nomemonitor) {
			this.nomemonitor = nomemonitor;
		}
      
		
		public int getidadministrador() {
			return idadministrador;
		}
		public void setidadministrador(int idadministrador) {
			this.idadministrador = idadministrador;
		}
      
		public String getnomeadministrador() {
			return nomeadministrador;
		}
		public void setnomeadministrador(String nomeadministrador) {
			this.nomeadministrador = nomeadministrador;
		}
		
		
		
		public String getlogin() {
			return login;
		}
		public void setlogin(String login) {
			this.login = login;
		}
		
		
		public String getsenha() {
			return senha;
		}
		public void setsenha(String senha) {
			this.senha = senha;
		}
		
	    /***************************************************************/
		
	    public static List<Usuario> recuperarPessoas() throws SQLException
	    {    
	    	conectar();
	    	
	    	ResultSet reader = comando.executeQuery("select * from pessoa");
	    	    	
	    	List<Usuario> contatos = new ArrayList<Usuario>();
	    	
	    	List<Categoria> habilitacoes = new ArrayList<Categoria>();
	    	habilitacoes = Categoria.Categorias(2);
	    	
	    	List<Categoria> tipos = new ArrayList<Categoria>();
	    	tipos = Categoria.Categorias(1);
	    	
	        while (reader.next())
	        {         
	        	Usuario novo = new Usuario();
	            try
	            {
	                novo.setid(((int)reader.getInt("idusuario") ));
	            }
	            catch (Exception e) {
				}
	            try
	            {
	                novo.setnome((String)reader.getString("nomepessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setdatanascimento((String)reader.getString("datanascimentopessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setfone((String)reader.getString("fonepessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcelular((String)reader.getString("celularpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setemail((String)reader.getString("emailpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setrua((String)reader.getString("ruapessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setbairro((String)reader.getString("bairropessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setnumeroendereco((int)reader.getInt("numeroenderecopessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcep((String)reader.getString("cep"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcpf((String)reader.getString("cpfpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setidhabilitacao((int)reader.getInt("idhabilitacao"));
	                
	                for(Categoria x : habilitacoes) {
		                if(x.id == novo.idhabilitacao) {
		                	novo.setnomehabilitacao(x.nome);
		                	break;
		                }
	                }
	            }
	            catch (Exception e) {}
	            	
	            
	            try
	            {
	                novo.setidtipo((int)reader.getInt("idtipo"));
	                for(Categoria x : tipos) {
		                if(x.id == novo.idtipo) {
		                	novo.setnometipo(x.nome);
		                	break;
		                }
	                }
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setidmonitor((int)reader.getInt("idmonitor"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setidadministrador((int)reader.getInt("idadministrador"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setlogin((String)reader.getString("login"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setsenha((String)reader.getString("senha"));
	            }
	                        catch (Exception e) {}
	                        
	            contatos.add(novo);
	        }

	        for(Usuario user : contatos) {
	        		 
            	for(Usuario subadm : contatos) {
            		if(user.idadministrador == subadm.idadministrador)
            		{
            			user.nomeadministrador = subadm.nome;
            			break;
            		}
            	}    
            	
            	for(Usuario submot : contatos) {
            		if(user.idmonitor== submot.idmonitor)
            		{
            			user.nomemonitor= submot.nome;
            			break;
            		}
            	}   
            	
            }
	        
	        
	        
	        
	        return contatos;

	    }

	    /***************************************************************/
		
	    public static List<Usuario> recuperarPessoas(String sql) throws SQLException
	    {    
	    	conectar();
	    	
	    	ResultSet reader = comando.executeQuery(sql);
	    	    	
	    	List<Usuario> contatos = new ArrayList<Usuario>();
	    	
	    	List<Categoria> habilitacoes = new ArrayList<Categoria>();
	    	habilitacoes = Categoria.Categorias(2);
	    	
	    	List<Categoria> tipos = new ArrayList<Categoria>();
	    	tipos = Categoria.Categorias(1);
	    	
	        while (reader.next())
	        {         
	        	Usuario novo = new Usuario();
	            try
	            {
	                novo.setid(((int)reader.getInt("idusuario") ));
	            }
	            catch (Exception e) {
				}
	            try
	            {
	                novo.setnome((String)reader.getString("nomepessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setdatanascimento((String)reader.getString("datanascimentopessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setfone((String)reader.getString("fonepessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcelular((String)reader.getString("celularpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setemail((String)reader.getString("emailpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setrua((String)reader.getString("ruapessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setbairro((String)reader.getString("bairropessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setnumeroendereco((int)reader.getInt("numeroenderecopessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcep((String)reader.getString("cep"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setcpf((String)reader.getString("cpfpessoa"));
	            }
	            catch (Exception e) {}
	            try
	            {
	                novo.setidhabilitacao((int)reader.getInt("idhabilitacao"));
	                
	                for(Categoria x : habilitacoes) {
		                if(x.id == novo.idhabilitacao) {
		                	novo.setnomehabilitacao(x.nome);
		                	break;
		                }
	                }
	            }
	            catch (Exception e) {}
	            	
	            
	            try
	            {
	                novo.setidtipo((int)reader.getInt("idtipo"));
	                for(Categoria x : tipos) {
		                if(x.id == novo.idtipo) {
		                	novo.setnometipo(x.nome);
		                	break;
		                }
	                }
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setidmonitor((int)reader.getInt("idmonitor"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setidadministrador((int)reader.getInt("idadministrador"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setlogin((String)reader.getString("login"));
	            }
	                        catch (Exception e) {}
	            try
	            {
	                novo.setsenha((String)reader.getString("senha"));
	            }
	                        catch (Exception e) {}
	                        
	            contatos.add(novo);
	        }

	        return contatos;

	    }

	    /***************************************************************/		
		
		
		
		
		
		
		
		
		
		
}
